package com.zf.apartment.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.zf.apartment.domain.*;
import com.zf.apartment.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zf.apartment.service.IFlatsService;

/**
 * 公寓管理Service业务层处理
 *
 * @author yingzi
 * @date 2024-09-27
 */
@Service
public class FlatsServiceImpl extends ServiceImpl<FlatsMapper, Flats> implements IFlatsService {
    @Autowired
    private FlatsMapper flatsMapper;
    @Autowired
    private RoomMapper roomMapper;
    @Autowired
    private LocationMapper locationMapper;
    @Autowired
    private FlatsLocationMapper flatsLocationMapper;
    @Autowired
    private FlatsImageMapper flatsImageMapper;
    @Autowired
    private ImageMapper imageMapper;
    @Autowired
    private PropertyDataMapper propertyDataMapper;
    @Autowired
    private FlatsPropertyDataMapper flatsPropertyDataMapper;
    private String IMAGETYPE="2";
    private String EMPTYROOMTYPE="0";
    private String EMPTYFLATS="0";
    private String FULLFLATS="1";

    /**
     * 查询公寓管理
     *
     * @param flatsId 公寓管理主键
     * @return 公寓管理
     */
    @Override
    public Flats selectFlatsByFlatsId(Long flatsId) {
        Flats flats1 = flatsMapper.selectFlatsByFlatsId(flatsId);
        List<FlatsLocation> flatsLocationList = flatsLocationMapper.selectFlatsLocationByFlatsId(flats1.getFlatsId());
        for (FlatsLocation flatsLocation : flatsLocationList) {
            if(locationMapper.selectLocationByLocationId(flatsLocation.getLocationId())!=null) {
                Location location = locationMapper.selectLocationByLocationId(flatsLocation.getLocationId());
                if (location.getLocationType().equals("P")) {
                    flats1.setProvince(location.getLocationId());
                    flats1.setProvinceName(location.getLocationName());
                } else if (location.getLocationType().equals("C")) {
                    flats1.setCity(location.getLocationId());
                    flats1.setCityName(location.getLocationName());
                } else if (location.getLocationType().equals("A")) {
                    flats1.setArea(location.getLocationId());
                    flats1.setAreaName(location.getLocationName());
                } else if (location.getLocationType().equals("D")) {
                    flats1.setDetail(location.getLocationName());
                }
            }
        }
        int emptyRoom = 0;
        if (roomMapper.selectRoomByFlatsId(flats1.getFlatsId()) != null) {
            List<Room> roomList = roomMapper.selectRoomByFlatsId(flats1.getFlatsId());
            for (Room room : roomList) {
                if (roomMapper.selectRoomByRoomId(room.getRoomId()).getRoomStatus().equals(EMPTYROOMTYPE)) {
                    emptyRoom=emptyRoom+1;
                }
            }
        }
        flats1.setEmptyRoom(emptyRoom);
        flats1.setRoomCount(roomMapper.selectRoomByFlatsId(flats1.getFlatsId()).size());
        if(emptyRoom!=0){
            flats1.setFlatsType(EMPTYFLATS);
        }else {
            flats1.setFlatsType(FULLFLATS);
        }
        FlatsImage flatsImage =flatsImageMapper.selectFlatsImageByFlatsId(flats1.getFlatsId());
        if(flatsImage!=null) {
            if(imageMapper.selectImageByImageId(flatsImage.getImageId())!=null) {
                Image image = imageMapper.selectImageByImageId(flatsImage.getImageId());
                flats1.setFlatsImagePath(image.getImagePath());
            }
        }

        List<FlatsPropertyData> flatsPropertyDataList = flatsPropertyDataMapper.selectFlatsPropertyDataByFlatsId(flats1.getFlatsId());
        List<String> flatspropertystr=new ArrayList<>();
        if (flatsPropertyDataList!=null) {
            for (FlatsPropertyData flatsPropertyData : flatsPropertyDataList) {
                    Long propertyDataId = flatsPropertyData.getPropertyDataId();
                    if (propertyDataMapper.selectPropertyDataByPropertyDataId(propertyDataId)!=null){
                        PropertyData propertyData = propertyDataMapper.selectPropertyDataByPropertyDataId(propertyDataId);
                        flatspropertystr.add(propertyData.getPropertyDataValue());
                    }
            }
        }
        flats1.setFlatsProperty(flatspropertystr);
        flats1.setFlatsProperty(flats1.getFlatsProperty());
        flats1.setFlatsId(flats1.getFlatsId());
        flats1.setFlatsName(flats1.getFlatsName());
        flats1.setFlatsPhoneNumber(flats1.getFlatsPhoneNumber());
        flats1.setFlatsStatus(flats1.getFlatsStatus());
        return flats1;
    }

    /**
     * 查询公寓管理列表
     *
     * @param flats 公寓管理
     * @return 公寓管理
     */
    @Override
    public List<Flats> selectFlatsList(Flats flats) {
        // 创建一个新的 List 来存储符合条件的公寓
        List<Flats> filteredList = new ArrayList<>();
        // 获取所有公寓
        List<Flats> allFlats = flatsMapper.selectFlatsList(flats);
        for (Flats flats1 : allFlats) {
            boolean matchesFilter = true;
            List<FlatsLocation> flatsLocationList = flatsLocationMapper.selectFlatsLocationByFlatsId(flats1.getFlatsId());
            for (FlatsLocation flatsLocation : flatsLocationList) {
                if(locationMapper.selectLocationByLocationId(flatsLocation.getLocationId())!=null) {
                    Location location = locationMapper.selectLocationByLocationId(flatsLocation.getLocationId());
                    if (location.getLocationType().equals("P")) {
                        flats1.setProvince(location.getLocationId());
                        flats1.setProvinceName(location.getLocationName());
                        if (flats.getProvince() != null && !flats.getProvince().equals(location.getLocationId())) {
                            matchesFilter = false;
                            break;
                        }
                    } else if (location.getLocationType().equals("C")) {
                        flats1.setCity(location.getLocationId());
                        flats1.setCityName(location.getLocationName());
                        if (flats.getCity() != null && !flats.getCity().equals(location.getLocationId())) {
                            matchesFilter = false;
                            break;
                        }
                    } else if (location.getLocationType().equals("A")) {
                        flats1.setArea(location.getLocationId());
                        flats1.setAreaName(location.getLocationName());
                        if (flats.getArea() != null && !flats.getArea().equals(location.getLocationId())) {
                            matchesFilter = false;
                            break;
                        }
                    } else if (location.getLocationType().equals("D")) {
                        flats1.setDetail(location.getLocationName());
                    }
                }
            }
            if (matchesFilter) {
                // 处理其他字段...
                int emptyRoom = 0;
                if (roomMapper.selectRoomByFlatsId(flats1.getFlatsId()) != null) {
                    List<Room> roomList = roomMapper.selectRoomByFlatsId(flats1.getFlatsId());
                    for (Room room : roomList) {
                        if (roomMapper.selectRoomByRoomId(room.getRoomId()).getRoomStatus().equals(EMPTYROOMTYPE)) {
                            emptyRoom++;
                        }
                    }
                }
                flats1.setEmptyRoom(emptyRoom);
                flats1.setRoomCount(roomMapper.selectRoomByFlatsId(flats1.getFlatsId()).size());
                if(emptyRoom!=0){
                    flats1.setFlatsType(EMPTYFLATS);
                }else {
                    flats1.setFlatsType(FULLFLATS);
                }
                // 处理图片...
                FlatsImage flatsImage = flatsImageMapper.selectFlatsImageByFlatsId(flats1.getFlatsId());
                if(flatsImage != null) {
                    if(imageMapper.selectImageByImageId(flatsImage.getImageId())!=null) {
                        Image image = imageMapper.selectImageByImageId(flatsImage.getImageId());
                        flats1.setFlatsImagePath(image.getImagePath());
                    }
                }

                // 处理属性...
                List<FlatsPropertyData> flatsPropertyDataList = flatsPropertyDataMapper.selectFlatsPropertyDataByFlatsId(flats1.getFlatsId());
                List<String> flatspropertystr = new ArrayList<>();
                if (flatsPropertyDataList != null) {
                    for (FlatsPropertyData flatsPropertyData : flatsPropertyDataList) {
                        Long propertyDataId = flatsPropertyData.getPropertyDataId();
                        if (propertyDataMapper.selectPropertyDataByPropertyDataId(propertyDataId) != null) {
                            PropertyData propertyData = propertyDataMapper.selectPropertyDataByPropertyDataId(propertyDataId);
                            flatspropertystr.add(propertyData.getPropertyDataValue());
                        }
                    }
                }
                flats1.setFlatsProperty(flatspropertystr);

                // 添加到过滤后的列表
                filteredList.add(flats1);
            }
        }

        return filteredList;
    }

    /**
     * 新增公寓管理
     *
     * @param flats 公寓管理
     * @return 结果
     */
    @Override
    public int insertFlats(Flats flats) {
        int rowsAffected = flatsMapper.insertFlats(flats);
        if (rowsAffected > 0) {
            FlatsLocation flatsLocation = new FlatsLocation();
            flatsLocation.setFlatsId(flats.getFlatsId());
            if (flats.getProvince() != null) {
                flatsLocation.setLocationId(flats.getProvince());
                flatsLocationMapper.insertFlatsLocation(flatsLocation);
            }
            if (flats.getCity() != null) {
                flatsLocation.setLocationId(flats.getCity());
                flatsLocationMapper.insertFlatsLocation(flatsLocation);
            }
            if (flats.getArea() != null) {
                flatsLocation.setLocationId(flats.getArea());
                flatsLocationMapper.insertFlatsLocation(flatsLocation);
            }
            if (flats.getDetail() != null && !flats.getDetail().isEmpty()) {
                Location location = new Location();
                location.setLocationName(flats.getDetail());
                location.setParentId(flats.getArea());
                location.setLocationType("D");
                locationMapper.insertLocation(location);
                flatsLocation.setLocationId(location.getLocationId());
                flatsLocationMapper.insertFlatsLocation(flatsLocation);
            }
            if (flats.getFlatsImagePath()!=null) {
                FlatsImage flatsImage = new FlatsImage();
                flatsImage.setFlatsId(flats.getFlatsId());
                if(imageMapper.selectImageByImagePath(flats.getFlatsImagePath())!=null) {
                    flatsImage.setImageId(imageMapper.selectImageByImagePath(flats.getFlatsImagePath()).getImageId());
                    flatsImageMapper.insertFlatsImage(flatsImage);
                }else {
                    flatsImageMapper.deleteFlatsImageByFlatsId(flats.getFlatsId());
                    Image image = new Image();
                    image.setImagePath(flats.getFlatsImagePath());
                    image.setImageType(IMAGETYPE);
                    image.setCreateTime(new Date());
                    imageMapper.insertImage(image);
                    flatsImage.setImageId(image.getImageId());
                    flatsImageMapper.insertFlatsImage(flatsImage);
                }
            }
            if(flats.getFlatsProperty()!=null){
                List<String> flatsProperty = flats.getFlatsProperty();
                FlatsPropertyData flatsPropertyData = new FlatsPropertyData();
                flatsPropertyData.setFlatsId(flats.getFlatsId());
                for (String flatsPropertystr : flatsProperty) {
                    if(propertyDataMapper.selectPropertyDataByPropertyDataValue(flatsPropertystr)!=null) {
                        PropertyData propertyData = propertyDataMapper.selectPropertyDataByPropertyDataValue(flatsPropertystr);
                        flatsPropertyData.setPropertyDataId(propertyData.getPropertyDataId());
                    }
                    flatsPropertyDataMapper.insertFlatsPropertyData(flatsPropertyData);
                }
            }
        } else {
            throw new RuntimeException("Failed to insert flats");
        }
        return rowsAffected;
    }
    /**
     * 修改公寓管理
     *
     * @param flats 公寓管理
     * @return 结果
     */
    @Override
    public int updateFlats(Flats flats) {
        int i = flatsMapper.updateFlats(flats);

        FlatsLocation flatsLocation = new FlatsLocation();
        flatsLocation.setFlatsId(flats.getFlatsId());
        flatsLocationMapper.deleteFlatsLocationByFlatsId(flats.getFlatsId());
        if (flats.getProvince() != null) {
            flatsLocation.setLocationId(flats.getProvince());
            flatsLocationMapper.insertFlatsLocation(flatsLocation);
        }
        if (flats.getCity() != null) {
            flatsLocation.setLocationId(flats.getCity());
            flatsLocationMapper.insertFlatsLocation(flatsLocation);
        }
        if (flats.getArea() != null) {
            flatsLocation.setLocationId(flats.getArea());
            flatsLocationMapper.insertFlatsLocation(flatsLocation);
        }
        if (flats.getDetail() != null && !flats.getDetail().isEmpty()) {
            Location location = new Location();
            location.setLocationName(flats.getDetail());
            location.setParentId(flats.getArea());
            location.setLocationType("D");
            locationMapper.insertLocation(location);
            flatsLocation.setLocationId(location.getLocationId());
            flatsLocationMapper.insertFlatsLocation(flatsLocation);
        }

        flatsImageMapper.deleteFlatsImageByFlatsId(flats.getFlatsId());
        if (flats.getFlatsImagePath()!=null) {
            FlatsImage flatsImage = new FlatsImage();
            flatsImage.setFlatsId(flats.getFlatsId());
            if(imageMapper.selectImageByImagePath(flats.getFlatsImagePath())!=null) {
                flatsImage.setImageId(imageMapper.selectImageByImagePath(flats.getFlatsImagePath()).getImageId());
                flatsImageMapper.insertFlatsImage(flatsImage);
            }else {
                flatsImageMapper.deleteFlatsImageByFlatsId(flats.getFlatsId());
                Image image = new Image();
                image.setImagePath(flats.getFlatsImagePath());
                image.setImageType(IMAGETYPE);
                image.setCreateTime(new Date());
                imageMapper.insertImage(image);
                flatsImage.setImageId(image.getImageId());
                flatsImageMapper.insertFlatsImage(flatsImage);
            }
        }

        flatsPropertyDataMapper.deleteFlatsPropertyDataByFlatsId(flats.getFlatsId());
        if(flats.getFlatsProperty()!=null){
            List<String> flatsProperty = flats.getFlatsProperty();
            FlatsPropertyData flatsPropertyData = new FlatsPropertyData();
            flatsPropertyData.setFlatsId(flats.getFlatsId());
            for (String flatsPropertystr : flatsProperty) {
                if(propertyDataMapper.selectPropertyDataByPropertyDataValue(flatsPropertystr)!=null) {
                    PropertyData propertyData = propertyDataMapper.selectPropertyDataByPropertyDataValue(flatsPropertystr);
                    flatsPropertyData.setPropertyDataId(propertyData.getPropertyDataId());
                }
                flatsPropertyDataMapper.insertFlatsPropertyData(flatsPropertyData);
            }
        }

        return i;
    }

    /**
     * 批量删除公寓管理
     *
     * @param flatsIds 需要删除的公寓管理主键
     * @return 结果
     */
    @Override
    public int deleteFlatsByFlatsIds(Long[] flatsIds) {
        flatsPropertyDataMapper.deleteFlatsPropertyDataByFlatsIds(flatsIds);
        flatsImageMapper.deleteFlatsImageByFlatsIds(flatsIds);
        flatsLocationMapper.deleteFlatsLocationByFlatsIds(flatsIds);
        return flatsMapper.deleteFlatsByFlatsIds(flatsIds);
    }

    /**
     * 删除公寓管理信息
     *
     * @param flatsId 公寓管理主键
     * @return 结果
     */
    @Override
    public int deleteFlatsByFlatsId(Long flatsId) {
        flatsPropertyDataMapper.deleteFlatsPropertyDataByFlatsId(flatsId);
        flatsImageMapper.deleteFlatsImageByFlatsId(flatsId);
        flatsLocationMapper.deleteFlatsLocationByFlatsId(flatsId);
        return flatsMapper.deleteFlatsByFlatsId(flatsId);
    }

    @Override
    public List<Flats> selectFlatsListByLocationId(Long lcationId) {
        return flatsMapper.selectFlatsListByLocationId(lcationId);
    }

    @Override
    public Long selectFlatsIdByFlatsName(String flatsName) {
        return flatsMapper.selectFlatsIdByFlatsName(flatsName);
    }

    @Override
    public List<Flats> selectAllFlatsList(Flats flats) {
        return flatsMapper.selectAllFlatsList(flats);
    }
}